﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Printing;
using System.Text;
using System.Windows.Forms;
using csharp.rad.general;
using ComponentFactory.Krypton.Toolkit;

namespace csharp.rad.GOVhotel
{
    public partial class Artigos : KryptonForm
    {
        Database myDBase;
        int qRow, qtItens, nmPag;

        public Artigos(Database myDBase)
        {
            InitializeComponent();
            this.myDBase = myDBase;
        }

        private void Form_Load(object sender, EventArgs e)
        {
            datador.Value = DateTime.Today;
            datador.MaxDate = DateTime.Today;
            datador.MinDate = DateTime.Today.AddDays(- 15);
            dataSaída.Value = DateTime.Today;
            dataSaída.MaxDate = DateTime.Today;
            dataSaída.MinDate = DateTime.Today.AddDays(-15);
            Achados rolObjetos = new Achados(myDBase);
            int dbRet = rolObjetos.Lista();
            if (dbRet != 0)
            {
                MessageBox.Show("Favor avisar a RamaSoft" + "\n"
                    + "referência: ArtigosLoad" + "\n" + rolObjetos.MsgErro,
                    "Erro no acesso ao Banco de Dados", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            for (int ix = 0; ix < rolObjetos.Items.Count; ix++)
            {
                listaArtigos.Rows.Add ( rolObjetos.Items[ix].Número.ToString(),rolObjetos.Items[ix].Descrição.Trim(),
                    rolObjetos.Items[ix].Data.ToString("dd/MM/yyyy"), rolObjetos.Items[ix].Local.Trim());
            }
            if (listaArtigos.Rows.Count > 0) listaArtigos.Sort(Column2, ListSortDirection.Ascending); 
            
            txDescr.Focus();
        }

        private void txDescr_KeyPress(object sender, KeyPressEventArgs e)
        {

        }

        private void datador_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == (char)Keys.Enter) txLocal.Focus();
        }

        private void txLocal_Enter(object sender, EventArgs e)
        {
            tTip .Show ("utilize o formato BLOCO__APARTAMENTO\n\n   ou pressione * para área comum", txLocal ,2000);
        }

        private void txLocal_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == '*')
            {
                e.Handled = true;
                txLocal.Text = "ar.com";
                txLocal_Grava();
            }
            if (e.KeyChar == (char)Keys.Enter) txLocal_Grava();
            if ((e.KeyChar != (char)Keys.Back) && (e.KeyChar != '_') && (e.KeyChar < '0' || e.KeyChar > '9')) e.Handled = true; 
        }

        private void txLocal_Grava()
        {
            string msgErro = "";
            if (txDescr.Text.Trim().Length < 3) msgErro = msgErro + "Descrição não preenchida\n";
            if (txLocal.Text != "ar.com")
            {
                if (txLocal.Text.Trim().Length != 5) msgErro = msgErro + "Local incompleto\n";
                if (txLocal.Text.Trim().Length > 2) if (txLocal.Text[1] != '_')
                    msgErro = msgErro + "Local => use o formato Bloco__Apartamento\n";
            }
            if (msgErro.Length > 0)
            {
                MessageBox.Show(msgErro, "   Favor Corrigir");
                return;
            }
            Achado regAchado = new Achado(myDBase);
            regAchado.Descrição = txDescr.Text;
            regAchado.Local = txLocal.Text;
            regAchado.Data = datador.Value;
            int dbRet = regAchado.Insert();
            if (dbRet != 0)
            {
                MessageBox.Show("Favor avisar a RamaSoft" + "\n"
                    + "referência: ArtigosLoad" + "\n" + regAchado.MsgErro,
                    "Erro no acesso ao Banco de Dados", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            listaArtigos.Rows.Add(regAchado.Número.ToString(), txDescr.Text.Trim(),
                dataSaída.Value.ToString("dd/MM/yyyy"), txLocal.Text.Trim());
            listaArtigos.Sort(Column2, ListSortDirection.Ascending);
            txDescr.Text = "";
            txLocal.Text = "";
            txDescr.Focus();
        }

        private void listaArtigos_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == (char)Keys.Space) listaArtigos_DoubleClick(null, null);
        }

        private void listaArtigos_DoubleClick(object sender, EventArgs e)
        {
            qRow = listaArtigos.CurrentRow.Index;
            if (qRow < 0) return;
            janEntrega.Visible = true;
            txObjeto.Text = listaArtigos.CurrentRow.Cells[1].Value.ToString();
            txObjeto.Tag = listaArtigos.CurrentRow.Cells[0].Value.ToString();
            dataSaída.Focus();
        }

        private void cmdOK_Click(object sender, EventArgs e)
        {
            Achado regAchado = new Achado(myDBase);
            regAchado.Número = Convert.ToInt32(txObjeto.Tag);
            regAchado.Entrega = dataSaída.Value;
            int dbRet = regAchado.SetEntrega();
            if (dbRet != 0)
            {
                MessageBox.Show("Favor avisar a RamaSoft" + "\n"
                    + "referência: ArtigosEntrega" + "\n" + regAchado.MsgErro,
                    "Erro no acesso ao Banco de Dados", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            listaArtigos.Rows.RemoveAt(qRow);
            infoOK.Visible = true;
            cmdRecibo.Visible = true;
            cmdRecibo.Focus();
        }

        private void cmdExit_Click(object sender, EventArgs e)
        {
            cmdRecibo.Visible = false;
            infoOK.Visible = false;
            janEntrega.Visible = false;
        }

        private void cmdRecibo_Click(object sender, EventArgs e)
        {
            PrintDocument recibo = new PrintDocument();
            recibo.PrintPage += new PrintPageEventHandler(this.Recibo_PrintPage);
            recibo.Print();
        }

        private void Recibo_PrintPage(object sender, PrintPageEventArgs ev)
        {
            Pen myPen = new Pen(Brushes.Black);
            ev.Graphics.DrawLine(myPen,230, 53, 580, 53);
            Font myFont1 = new Font("Arial", 14);
            ev.Graphics.DrawString("Devolução de Objeto", myFont1, Brushes.Black, 310, 30);
            ev.Graphics.DrawString("Recebí, do Residencial Parque das Águas Quentes,", myFont1, Brushes.Black, 50, 70);
            ev.Graphics.DrawString("a devolução de " + txObjeto.Text.Trim() + ","   , myFont1, Brushes.Black, 50, 90);
            ev.Graphics.DrawString("de minha propriedade.", myFont1, Brushes.Black, 50,110);
            ev.Graphics.DrawString("Caldas Novas, " + dataSaída.Value.ToString("dd 'de' MMMM 'de' yyyy"), myFont1, Brushes.Black, 230, 190);
            ev.Graphics.DrawString("Nome:", myFont1, Brushes.Black, 50, 140);
            ev.Graphics.DrawString("Identidade nº:", myFont1, Brushes.Black, 50, 160);
            ev.Graphics.DrawString("assinatura", myFont1, Brushes.Black, 320, 258);
            ev.Graphics.DrawLine(myPen,115, 160, 580, 160);
            ev.Graphics.DrawLine(myPen,175, 180, 380, 180);
            ev.Graphics.DrawLine(myPen, 230, 260, 580, 260);
            ev.HasMorePages = false;
        }

        private void menuPrint_Click(object sender, EventArgs e)
        {
            PrintDocument docto = new PrintDocument();
            docto.PrintPage += new PrintPageEventHandler(this.Docto_PrintPage);
            qtItens = listaArtigos.Rows.Count;
            qRow = 0;
            docto.Print();
        }

        private void Docto_PrintPage(object sender, PrintPageEventArgs ev)
        {
            Pen myPen = new Pen(Brushes.Black);
            ev.Graphics.DrawLine(myPen, 30, 50, 780, 50);
            Font myFont1 = new Font("Arial", 14);
            Font myFont2 = new Font("Arial", 12, FontStyle.Underline);
            Font myFont3 = new Font("Arial", 12);
            ev.Graphics.DrawString("Parque das Águas Quentes", myFont1, Brushes.Black, 30, 30);
            ev.Graphics.DrawString("Achados e Perdidos", myFont1, Brushes.Black, 350, 30);
            ev.Graphics.DrawString(DateTime.Today.ToString("dd/MMMM/yyyy"), myFont1, Brushes.Black, 630, 30);
            ev.Graphics.DrawString("data", myFont2, Brushes.Black, 30, 55);
            ev.Graphics.DrawString("local", myFont2, Brushes.Black, 125, 55);
            ev.Graphics.DrawString("descrição do objeto", myFont2, Brushes.Black, 190, 55);
            if (qRow > 0)
            {
                nmPag = nmPag + 1;
                ev.Graphics.DrawString("pág. " + nmPag.ToString(), myFont1, Brushes.Black, 720, 50);
            }
            int lna = 75;
            for (int ix = 0; ix < 55; ix++)
            {
                ev.Graphics.DrawString(listaArtigos.Rows[qRow].Cells[2].Value.ToString(), myFont3, Brushes.Black, 30, lna);
                ev.Graphics.DrawString(listaArtigos.Rows[qRow].Cells[3].Value.ToString(), myFont3, Brushes.Black, 125, lna);
                ev.Graphics.DrawString(listaArtigos.Rows[qRow].Cells[1].Value.ToString(), myFont3, Brushes.Black, 190, lna);
                qRow = qRow + 1;
                lna = lna + 16;
                if (qRow >= qtItens) break ;
            }
            if (qRow >= qtItens) ev.HasMorePages = false;
            else ev.HasMorePages = true;
        }
        
      private void proximoControle(object sender,KeyEventArgs e)
      {
         if( e.KeyCode == Keys.Enter)
            this.SelectNextControl(this.ActiveControl, true, true, true, true); 
      }        
    }
}
